package cloud.shyidong.core.controller;

import cloud.shyidong.core.dao.BaseDao;
import cloud.shyidong.core.entity.BaseEntity;
import cloud.shyidong.core.request.*;
import cloud.shyidong.core.response.PageResponse;
import cloud.shyidong.core.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * @Description TODO
 * @Author syd
 * @Date 2023/3/27
 */
public interface BaseController<S extends BaseService, D extends BaseDao, T extends BaseEntity, ID extends IdRequest, IQ extends InsertRequest, UQ extends UpdateRequest, PQ extends PageRequest> {
    
    /**
     * 添加数据
     *
     * @param insertRequest
     */
    T insert(IQ insertRequest);
    
    /**
     * 修改数据
     *
     * @param updateRequest
     */
    T update(UQ updateRequest);
    
    /**
     * 删除数据
     *
     * @param idRequest
     */
    T delete(ID idRequest);
    
    /**
     * 批量删除
     *
     * @param idList
     */
    Map<String, Object> deletes(IdsRequest<ID> idsRequest);
    
    /**
     * 启动数据
     *
     * @param idRequest
     */
    T enable(ID idRequest);
    
    /**
     * 批量启用
     *
     * @param idsRequest
     * @return
     */
    Map<String, Object> enables(IdsRequest<ID> idsRequest);
    
    /**
     * 禁用数据
     *
     * @param idRequest
     */
    T disable(ID idRequest);
    
    /**
     * 批量禁用
     *
     * @param idsRequest
     * @return
     */
    Map<String, Object> disables(IdsRequest<ID> idsRequest);
    
    /**
     * 上架数据
     *
     * @param idRequest
     */
    T up(ID idRequest);
    
    /**
     * 批量上架
     *
     * @param idsRequest
     * @return
     */
    Map<String, Object> ups(IdsRequest<ID> idsRequest);
    
    /**
     * 下架数据
     *
     * @param idRequest
     */
    T down(ID idRequest);
    
    /**
     * 批量下架
     *
     * @param idsRequest
     * @return
     */
    Map<String, Object> downs(IdsRequest<ID> idsRequest);
    
    /**
     * 查询数据
     *
     * @param idRequest
     * @return
     */
    Map<String, Object> view(ID idRequest);
    
    /**
     * 查询列表数据
     *
     * @return
     */
    List<T> search(PQ pageRequest);
    
    /**
     * 分页查询数据
     *
     * @param pageRequest
     * @return
     */
    PageResponse<Map<String, Object>> page(PQ pageRequest);
    
}
